import Util from "./util";
import SystemDemo from "./systemdemo";
import eu from "./enum";
import lodash from "lodash";

export function onclick(idStr, param) {
    if (typeof wps.Enum != "object") {
        wps.Enum = Util.WPS_Enum;
    }
    switch (idStr) {
        case "确定": {
            // 优先从存储的字符串中加载信息，因为用户可能编辑存储的字符串
            let data_str = SystemDemo.get_cell_value(1, 1, "pro_dat");
            try {
                let data = JSON.parse(data_str);
                for (let i in data) {
                    let sp = eu.get_point_by_name(i);
                    sp["io"] = data[i].io;
                    console.log(eu.StandardPoint);
                }
                this.points = get_device();
            } catch (e) {
            }

            break;
        }
    }
}

export function get_device() {
    /**
     * 获取需要额外进行设置的测点的信息，返回的是eu.StandardPoint中的对象。
     * 一般返回的是当前机组中存在的各级抽汽测点的测点对象，下一步需要设置这些抽汽的来源及去向。
     */
    SystemDemo.refreshTestPoints();
    let exist_component = [];
    for (let key in eu.StandardPoint) {
        let content = eu.StandardPoint[key];
        if (content["exists"]) {
            exist_component.push(eu.StandardPoint[key]);
        }
    }
    let res = [];
    for (let i in exist_component) {
        let name = exist_component[i]["name"];
        if (lodash.includes(name, "抽")) {
            res.push(exist_component[i]);
        }
    }
    return res;
}

export function 抽汽信息设置(name) {
    if (name === "一段抽汽") {
    }
}

export function 初始化抽汽信息() {
    /**
     * 不会导致活动工作簿改变
     *
     * @type {Et.EtWorkbook}
     */
    let active_sheet = Application.ActiveSheet
    let points = get_device();  // 获取当前机组中存在的抽汽测点
    for (let i in points) {
        let item = points[i];
        抽汽信息描述(item);
    }
    active_sheet.Activate();
}

export function 初始化漏汽信息() {
    /**
     * 根据pro.dat工作簿中的设置初始化机组中各级抽汽的来源及去向，如果不存在pro.dat工作簿，则会生成默认值，并保存在新创建的pro.dat工作簿中。
     * @type {*}
     */
    // let active_sheet = Application.ActiveSheet
    // let dataframe = SystemDemo.read_sheet("漏汽", 0)  // 0表示第一列作为行标题读入
    // if (dataframe) {  // 如果读取到了漏气数据
    //     dataframe.print();
    //     eu.StandardPoint.leakage.obj = new eu.Leakage(dataframe, 1, 1);
    //     console.log(eu.StandardPoint.leakage)
    // }
    // active_sheet.Activate();
}

export function 初始化疏水信息() {
    /**
     * 根据pro.dat工作簿中的设置初始化机组中各级疏水的去向，如果不存在pro_dat工作簿，则会生成默认值，并保存在新创建的pro_dat工作簿中。
     * @type {*}
     */

    function get_default_drain_to(i) {
        /**
         * 获取每级加热器的默认疏水去向
         * @type {string}
         */
        i = i.toString()

        if (i === "1") {
            return "heater_2";
        } else if (i === "2") {
            return "heater_3"
        } else if (i === "3") {
            return "deaerator_drain_water_in"
        } else if (i === "4") {
            return "deaerator_drain_water_in"
        } else if (i === "5") {
            return "heater_6"
        } else if (i === "6") {
            return "heater_7"
        } else if (i === "7") { // 7号低加疏水
            if (lodash.includes(JSON.parse(wps.PluginStorage.getItem("低加级数")), 9)) {
                return "heater_6_water_in"
            } else if (lodash.includes(JSON.parse(wps.PluginStorage.getItem("低加级数")), 8)) {
                return "heater_8"
            } else {
                return "condenser"
            }
        } else if (i === "8") {
            if (lodash.includes(JSON.parse(wps.PluginStorage.getItem("低加级数")), 9)) {
                return "heater_9"
            } else {
                return "condenser"
            }
        } else if (i === "9") {
            return "condenser"
        }

    }

    function get_heater_drain_to(i) {
        /**
         * 获取i号加热器疏水的流向，i取值为 "1", "2", "3" 等
         */
        let point = eu.StandardPoint["heater_" + i]
        let drain_to = point["drain_to"];
        if (drain_to) {
            return drain_to
        }

        let sheet = SystemDemo.get_sheet_by_name("pro_dat");
        if (sheet) {
            let dat_str = SystemDemo.get_cell_value(2, 1, "pro_dat");
            let data_obj;
            if (dat_str) { // data_str为null、undefined、""时均不会执行
                try {
                    data_obj = JSON.parse(dat_str); // 将字符串转换为对象
                } catch (e) {
                    alert("从pro_dat工作簿中读取加热器疏水信息时出错，请检查pro_dat!A2单元格！")
                    return
                }
            } else {
                data_obj = {}
            }
            let data_p = data_obj[point["name"]];
            if (data_p) {
                drain_to = data_p["drain_to"]
            } else {
                data_obj[point["name"]] = { "drain_to": get_default_drain_to(i) }
                drain_to = data_obj[point["name"]]["drain_to"]
                SystemDemo.set_cell_value(2, 1, JSON.stringify(data_obj), "pro_dat")
                return drain_to;
            }
            if (drain_to) {
                return drain_to;
            } else {
                data_p["drain_to"] = get_default_drain_to(i)
                SystemDemo.set_cell_value(2, 1, JSON.stringify(data_obj), "pro_dat")
                return data_p["drain_to"]
            }
        } else { // 不存在pro_dat时使用默认值
            let point_name = point.name;
            let drain_to = get_default_drain_to(i)
            let obj = {};
            obj[point_name] = { "drain_to": drain_to }
            SystemDemo.set_cell_value(2, 1, JSON.stringify(obj), "pro_dat")
            return drain_to
        }
    }

    let active_sheet = Application.ActiveSheet
    let 高加级数 = JSON.parse(wps.PluginStorage.getItem("高加级数")); // [1,2,3]
    let 低加级数 = JSON.parse(wps.PluginStorage.getItem("低加级数")); // [5,6,7,8,9]
    for (let i of 高加级数) {
        eu.StandardPoint["heater_" + i]["drain_to"] = get_heater_drain_to(i)
    }
    for (let i of 低加级数) {
        eu.StandardPoint["heater_" + i]["drain_to"] = get_heater_drain_to(i)
    }
    active_sheet.Activate();
}

export function 抽汽信息描述(item) {
    /**
     * 从pro.dat工作簿中获取抽汽点的相关信息描述，如果不存在指定抽汽的信息，则使用默认值并更新pro.dat
     * item取值为 enum.StandardPoint["extract_1"] 等
     */
    if (item["io"]) {
        // 首先判断当前的item中是否存在"io"项
        SystemDemo.update_project(item);
        return "自" + item["io"]["from"] + "; 至" + item["io"]["to"];
    } else {
        // 其次，尝试从excel文档的"pro_dat"工作表中加载存储的信息
        let sheet = SystemDemo.get_sheet_by_name("pro_dat");
        if (sheet) {
            //
            try {
                let dat_str = SystemDemo.get_cell_value(1, 1, "pro_dat");
                let data_obj = JSON.parse(dat_str); // 将字符串转换为对象
                let io = data_obj[item["name"]]["io"]; // 获取对象中当前项的io信息
                let x = "自" + io["from"] + "; 至" + io["to"];
                eu.get_point_by_name(item["name"])["io"] = io;
                return x;
            } catch (e) {
                // 报错则说明没有正确加载，意味着存储信息中不存在对应项的io信息
                console.log("不存在" + item.name + "的信息设置，使用默认值");
            }
        }
        // 最后，如果不存在对应的测点信息，则指定默认值
        item["io"] = {}; // 初始化item["io"]
        if (item["name"] === "一段抽汽") {
            item["io"]["from"] = "高压缸";
            item["io"]["to"] = "一号高加";
            console.log("更新一段抽汽");
        } else if (item["name"] === "二段抽汽") {
            item["io"]["from"] = "高压缸排汽";
            item["io"]["to"] = "二号高加";
            console.log("更新二段抽汽");
        } else if (item["name"] === "三段抽汽") {
            item["io"]["from"] = "中压缸";
            item["io"]["to"] = "三号高加";
        } else if (item["name"] === "四段抽汽") {
            item["io"]["from"] = "中压缸";
            item["io"]["to"] = "除氧器";
        } else if (item["name"] === "五段抽汽") {
            item["io"]["from"] = "中压缸排汽";
            item["io"]["to"] = "五号低加";
        } else if (item["name"] === "六段抽汽") {
            item["io"]["from"] = "低压缸";
            item["io"]["to"] = "六号低加";
        } else if (item["name"] === "七段抽汽") {
            item["io"]["from"] = "低压缸";
            item["io"]["to"] = "七号低加";
        } else if (item["name"] === "八段抽汽") {
            item["io"]["from"] = "低压缸";
            item["io"]["to"] = "八号低加";
        } else if (item["name"] === "九段抽汽") {
            item["io"]["from"] = "低压缸";
            item["io"]["to"] = "九号低加";
        }

        SystemDemo.update_project(item);
        return "自" + item["io"]["from"] + "; 至" + item["io"]["to"];
    }
}

export default {
    onclick,
    get_device: get_device,
    抽汽信息设置,
    抽汽信息描述,
    初始化疏水信息: 初始化疏水信息,
    初始化漏汽信息: 初始化漏汽信息,
};
